<?php

require_once("model/image.php");
require_once("model/imageDAO.php");
require_once("model/data.php");

class ViewPhotoMatrix {

	private $imgDAO;
	private $firstImg;
	
	function __construct() {
		$this->imgDAO = new ImageDAO(".");
		
		global $data;
		$data = new Data();
		
		// Construit l'image courante
		// et l'ID courant 
		if (isset($_GET["imgId"])) {
			$data->imgId = $_GET["imgId"];
			$this->firstImg = $this->imgDAO->getImage($data->imgId);
		} else {
			// Pas d'image, se positionne sur la première
			$this->firstImg = $this->imgDAO->getFirstImage();
			// Conserve son id pour définir l'état de l'interface
			$data->imgId = $this->firstImg->getId();
		}
		
		// Récupère le nombre d'images à afficher
		if (isset($_GET["nbImg"])) {
			$data->nbImg = $_GET["nbImg"];
		} else {
			# sinon débute avec 2 images
			$data->nbImg = 2;
		}
		
		# Adapte la taille des images au nombre d'images présentes
		$data->size = 480 / sqrt($data->nbImg);
	}
	
	/************************************************************************************************
	 *                                         ACTIONS                                              *
	 ************************************************************************************************/
	 function index() {
	 	global $data;
	 	
		// Construction de la matrice des photos à afficher
		$this->imageMatrix();
		
		// Charge le menu
		$this->menu();
		
		// Indique la vue à afficher et charge le contenu
		$data->content = "photoMatrixView.php";
		require_once("view/mainView.php");
	 }
	 
	 function first() {
	 	global $data;
	 	
	 	// Calcule la première image
		$this->firstImg = $this->imgDAO->getFirstImage();     
		// Attribue la nouvelle valeur d'imgId
		$data->imgId = $this->firstImg->getId();
		
		// Construction de la matrice des photos à afficher
		$this->imageMatrix();
		
		// Charge le menu
		$this->menu();
		
		// Indique la vue à afficher et charge le contenu
		$data->content = "photoMatrixView.php";
		require_once("view/mainView.php");
	 }
	 
	 function prev() {
	 	global $data;
	 	
	 	// Calcule l'image précedente
		$this->firstImg = $this->imgDAO->jumpToImage($this->firstImg, 0-$data->nbImg);
		// Attribue la nouvelle valeur d'imgId
		$data->imgId = $this->firstImg->getId();
		
		// Construction de la matrice des photos à afficher
		$this->imageMatrix();
		
		// Charge le menu
		$this->menu();
		
		// Indique la vue à afficher et charge le contenu
		$data->content = "photoMatrixView.php";
		require_once("view/mainView.php");
	 }
	 
	 function next() {
	 	global $data;
	 	
	 	// Calcule l'image suivante
		$this->firstImg = $this->imgDAO->jumpToImage($this->firstImg, $data->nbImg);
		// Attribue la nouvelle valeur d'imgId
		$data->imgId = $this->firstImg->getId();
		
		// Construction de la matrice des photos à afficher
		$this->imageMatrix();
		
		// Charge le menu
		$this->menu();
		
		// Indique la vue à afficher et charge le contenu
		$data->content = "photoMatrixView.php";
		require_once("view/mainView.php");
	 }
	 
	 function random() {
	 	global $data;
	 	
	 	// Calcule une image au hasard
		$this->firstImg = $this->imgDAO->getRandomImage();
		// Attribue la nouvelle valeur d'imgId
		$data->imgId = $this->firstImg->getId();
		
		// Construction de la matrice des photos à afficher
		$this->imageMatrix();
		
		// Charge le menu
		$this->menu();
		
		// Indique la vue à afficher et charge le contenu
		$data->content = "photoMatrixView.php";
		require_once("view/mainView.php");
	 }
	 
	 function more() {
	 	global $data;
	 	
	 	// Double le nombre d'images à afficher
		$data->nbImg *= 2;
		
		// Adapte la taille des images au nombre d'images présentes
		$data->size = 480 / sqrt($data->nbImg);
		
		// Construction de la matrice des photos à afficher
		$this->imageMatrix();
		
		// Charge le menu
		$this->menu();
		
		// Indique la vue à afficher et charge le contenu
		$data->content = "photoMatrixView.php";
		require_once("view/mainView.php");
	 }
	 
	 function less() {
	 	global $data;
	 	
	 	// Divise par deux le nombre d'images à afficher
		$data->nbImg = intval($data->nbImg / 2);
		if ($data->nbImg == 1) {
			header("Location: index.php?controller=viewPhoto&action=index&imgId=".$data->imgId);
			die();
		} else if ($data->nbImg < 2) {
			$data->nbImg = 2;
		}
		
		// Adapte la taille des images au nombre d'images présentes
		$data->size = 480 / sqrt($data->nbImg);
		
		// Construction de la matrice des photos à afficher
		$this->imageMatrix();
		
		// Charge le menu
		$this->menu();
		
		// Indique la vue à afficher et charge le contenu
		$data->content = "photoMatrixView.php";
		require_once("view/mainView.php");
	 }
	
	/************************************************************************************************
	 *                                         UTILITAIRES                                          *
	 ************************************************************************************************/
	private function menu() {
		global $data;
		
		# Mise en place du menu
		$data->menu['Home']="index.php?controller=home&action=index";
		$data->menu['A propos']="index.php?controller=home&action=aPropos";
		$data->menu['First']="index.php?controller=viewPhotoMatrix&action=first&imgId=".$data->imgId."&nbImg=".$data->nbImg;
		$data->menu['Random']="index.php?controller=viewPhotoMatrix&action=random&imgId=".$data->imgId."&nbImg=".$data->nbImg;
		$data->menu['More']="index.php?controller=viewPhotoMatrix&action=more&imgId=".$data->imgId."&nbImg=".$data->nbImg;
		$data->menu['Less']="index.php?controller=viewPhotoMatrix&action=less&imgId=".$data->imgId."&nbImg=".$data->nbImg;
		$data->menu['Upload de photos']="index.php?controller=uploadPhoto&action=index";
		$data->menu['Gestion des albums']="index.php?controller=gestionAlbums&action=index";
		
	}
	
	private function imageMatrix() {
		global $data;
		
		# Calcul la liste des images à afficher
		$imgLst= $this->imgDAO->getImageList($this->firstImg,$data->nbImg);
		
		# Transforme cette liste en liste de couples (tableau a deux valeurs)
		# contenant l'URL de l'image et l'URL de l'action sur cette image
		foreach ($imgLst as $i) {
			# l'identifiant de cette image $i
			$iId=$i->getId();
			# Ajoute à imgMatrixURL 
			#  0 : l'URL de l'image
			#  1 : l'URL de l'action lorsqu'on clique sur l'image : la visualiser seul
			$data->imgMatrixURL[] = array($i->getURL(),"index.php?controller=viewPhoto&action=index&imgId=$iId");
		}
	}
}
?>
